IIS 短命名文件泄露

漏洞简介

为了兼容16位MS-DOS程序,Windows为文件名较长的文件(和文件夹)生成了对应的windows 8.3 短文件名

Windows下使用dir /x命令查看对应的短文件名
1.png

短文件名特征:

  1. 只有前六位字符直接显示,后续字符用~1指代。其中数字1还可以递增,如果存在多个文件名类似的文件(名称前6位必须相同,且后缀名前3位必须相同)。
  2. 后缀名最长只有3位,多余的被截断。
    可以在启用.net的IIS下暴力列举短文件名,

    漏洞成因:

    访问构造的某个存在的短文件名,会返回 404
    访问构造的某个不存在的短文件名,会返回 400

漏洞探测:

漏洞的利用,需要使用到通配符。在windows中,可以匹配n个字符,n可以为0. 判断某站点是否存在IIS短文件名暴力破解,构造payload,分别访问如下两个URL:
A:www.test.com/*~1****/a.aspx
B:www.test.com/wtest*~1****/a.aspx
访问 A 返回 404,访问 B 返回 400,则站点存在漏洞

目录猜解

  1. 访问 www.test.com/a*~1****/a.aspx
    如果返回 404,则证明存在以 a 开头的文件或文件夹
    以此来猜解出六位字符
  2. 例猜解完结果为:www.test.com/abcdef*~1****/a.aspx
    如果以 abcdef 开头的是一个文件夹,则访问 www.test.com/abcdef*~1/a.aspx 返回 404
    如果以 abcdef 开头的是一个文件,则继续猜解 www.test.com/abcdef*~1*g**/a.aspx
    继续猜解 g 位置的字符,返回 404 则代表存在。以此猜解完后缀名中的三个字符。

漏洞局限性

  1. 只能猜解前六位,以及扩展名的前3位。
  2. 名称较短的文件是没有相应的短文件名的。
  3. 需要 IIS 和 .net 两个条件都满足。

漏洞修复

  1. 通用有效方法
    禁用windows系统中的短文件名功能。
    打开注册表并打开此目录 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem
    修改 NtfsDisable8dot3NameCreation 的值为1 。
    修改完成后,需要重启系统生效。
  2. 简单有效方法:CMD命令
  • Windows Server 2008 R2
    查询是否开启短文件名功能:fsutil 8dot3name query
    关闭该功能:fsutil 8dot3name set 1
  • Windows Server 2003
    关闭该功能:fsutil behavior set disable8dot3 1
  1. 手动验证
    新建文件夹并创建几个文件,打开CMD进入该文件夹呢执行dir /x 检测,看不到有显示短文件名则成功。
    1
    2
    3
    4
    5
    注: 1. Windows Server 2003修改后需要重启服务器生效!
    2. 已存在的文件短文件名不会取消,只对以后创建的文件有效!
    3. WEB站点需要将内容拷贝到另一个位置,
    如D:\www到D:\www.back,然后删除原文件夹D:\www,再重命名D:\www.back到D:\www。
    如果不重新复制,已经存在的短文件名则是不会消失的。

参考链接:https://segmentfault.com/a/1190000006225568